{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "### K-means聚类\n",
    "\n",
    "> 理论 《统计学习方法》第14章 聚类方法 14.3 k均值聚类\n",
    ">\n",
    "> 代码 numpy version && torch version\n",
    ">\n",
    "> Python3.7\n",
    ">\n",
    "> created 2023/02/14\n",
    ">\n",
    "> author lyz\n",
    ">\n",
    "> email 2281250383@qq.com"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "聚类是针对给定的样本，根据它们特征的相似度或者距离，将其归并到若干个\"类\"或\"簇\"。\n",
    "\n",
    "聚类属于无监督学习"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### 相似度或距离\n",
    "\n",
    "度量距离的方法有：\n",
    "1. 闵可夫斯基距离\n",
    "    p=2的时候是欧式距离\n",
    "    $$d_{ij} = (\\Sigma |x_{ki} - x_{kj}|^p)^{1\\over p}$$\n",
    "\n",
    "\n",
    "2. 相关系数\n",
    "3. 余弦夹角\n"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### 类或簇\n",
    "\n",
    "本质是样本的一个子集。用G表示类或者簇 cluster\n",
    "\n",
    "簇的特征：\n",
    "1. 类的均值$\\bar {x}$又称类的中心\n",
    "    $$\n",
    "        \\bar{x_G} = {1\\over n_G} \\Sigma^{n_G}_{i=1}x_i\n",
    "    $$\n",
    "2. 类的直径$D_G$\n",
    "    类的直径是类中任意两个样本间的最大距离\n",
    "3. 类的样本散步矩阵$A_G$与样本协方差矩阵"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "k-means是基于样本集合划分的聚类方法。k-means将样本集合划分为k个子集，构成k个类，将n个样本分到k个类中，每个样本到其所属类的中心的距离最小，每个样本只能属于一个类。"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "##### 模型\n",
    "\n",
    "n个样本的集合X，每个样本由一个特征向量表示，特征向量的维数为m。\n",
    "\n",
    "k-means的目的是将n个样本划分到k个不同的簇中，假设k个类$G_1,...G_k$。簇互不相交且其并集为X。\n",
    "\n",
    "划分方法为C，C是一个多对一的函数。\n",
    "\n",
    "k-means是一个从样本到类的函数"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "##### 策略\n",
    "\n",
    "通过损失函数的最小换来选取最优的划分或函数$C^*$\n",
    "\n",
    "采用欧式距离平方作为样本间的距离$d(x_i,x_j$\n",
    "\n",
    "定义损失函数：样本与其所属类的中心间的距离总和\n",
    "\n",
    "$$\n",
    "    W(C) = \\Sigma^k_{l=1} \\Sigma_{C(i)=l} ||x_i-\\bar{x_i}||^2\n",
    "$$\n",
    "\n",
    "k-means就是求解最优化问题\n",
    "\n",
    "$$C^* = arg \\min W(C) = arg \\min \\Sigma^k_{l=1} \\Sigma_{C(i)=l} ||x_i-\\bar{x_i}||^2 $$"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "##### 算法\n",
    "\n",
    "迭代：\n",
    "\n",
    "   1. 选择k个类的中心，将样本逐个指派到与其最近的中心的类中，得到一个聚类结果\n",
    "\n",
    "   2. 更新每个类的样本均值，作为类的新的中心\n",
    "\n",
    "重复迭代，直到收敛"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import torch\n",
    "import numpy as np\n",
    "from sklearn.datasets import make_blobs\n",
    "import random\n",
    "import matplotlib.pyplot as plt"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "outputs": [],
   "source": [
    "k = 4"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "outputs": [],
   "source": [
    "def draw_figure(dataset,labels,title):\n",
    "    plt.figure(dpi=64,figsize=(4,4))\n",
    "    plt.scatter(dataset[:,0],dataset[:,1],c=labels)\n",
    "    plt.title(title)\n",
    "    plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(200, 2)\n"
     ]
    }
   ],
   "source": [
    "x_train,y_train = make_blobs(n_samples=200,n_features=2,centers=k,shuffle=True,random_state=11)\n",
    "print(x_train.shape)"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "##### 使用numpy实现的k-means"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "outputs": [],
   "source": [
    "class KMeans(object):\n",
    "    def __init__(self,k):\n",
    "        self.k = k\n",
    "\n",
    "    @staticmethod\n",
    "    def calc_distance(a,b):\n",
    "        c = a - b\n",
    "        d = np.power(c,2)\n",
    "        return np.sqrt(np.sum(d,axis=1))\n",
    "\n",
    "    def get_labels(self,data):\n",
    "        # 从data中随机选择k个样本作为初始的k个簇中心\n",
    "        idx = random.sample(list(range(len(data))),self.k)\n",
    "        clusters = data[idx]\n",
    "        labels = np.zeros(len(data))\n",
    "        while True:\n",
    "            cnt = 0\n",
    "            for i,d in enumerate(data):\n",
    "                distances = self.calc_distance(d,clusters)\n",
    "                # print('distances ',distances,'len ',len(distances))\n",
    "                min_idx = np.argmin(distances)\n",
    "                if labels[i] != min_idx:\n",
    "                    cnt += 1\n",
    "                    labels[i] = min_idx\n",
    "                if cnt == 0:\n",
    "                    # 若没有误分类的点，结束\n",
    "                    break\n",
    "\n",
    "            # 重新计算簇中心\n",
    "            for label in range(self.k):\n",
    "                points = data[labels == label]\n",
    "                centroid = np.mean(points,axis=0)\n",
    "                clusters[label] = centroid\n",
    "\n",
    "            for cluster in clusters:\n",
    "                print('cluster center is',cluster)\n",
    "\n",
    "            return labels"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cluster center is [-0.84433296  4.64732241]\n",
      "cluster center is [-9.72603893 -0.31254488]\n",
      "cluster center is [-1.69544387 -0.25497474]\n",
      "cluster center is [-6.28603255 -9.66570137]\n"
     ]
    }
   ],
   "source": [
    "net = KMeans(k)\n",
    "labels = net.get_labels(x_train)"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 256x256 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPQAAADuCAYAAAAOYioDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAAnYAAAJ2AHHoLmtAABIF0lEQVR4nO2dd3hUVfrHP3d6egNi6L33GkogFEECWBAFbCBSdH9iQ0XdtayVte5aUASVRVHRtaHEgCi9t4DSe6/pk+lzz++PgSGTmTSYQBLO53l4Huaecs+9me+c9p73VYQQAolEUiXQXO0GSCSS4CEFLZFUIaSgJZIqhBS0RFKFkIKWSKoQUtBVkJSUFI4ePVpivvbt2+N2uy/5PmPHjmXWrFkl5ps1axZjx44tMd/s2bM5cODAJbdHArqr3QBJ8FBVFUVRSE1NLVX+9PT08m1QGZk9eza1a9emYcOGV7splRbZQ1cS5s+fT/v27Wnbti3Dhg3j1KlTgEcEw4YNY+TIkbRv355z585Rv3599u3bB8DSpUtp1aoV7du354UXXkBRFG+diqLgcrm8/3/11Vfp1KkTzZs3Z/Xq1QAcP36c5ORkOnXqROvWrXnzzTdL1d4nn3ySJk2a0LNnTzZu3Oi9np6eTq9evejYsSNt2rThiy++AGDOnDls3LiR+++/n/bt25Oens6iRYtITEykQ4cOdOjQgUWLFl3+i6zqCEmF59SpU6JGjRpi//79QgghXn75ZXHbbbcJIYT47LPPRHR0tDh69Kg3f7169cTevXuFzWYTtWrVEhs3bhRCCPH222+Lgn9yQDidTu//P/vsMyGEEF9++aXo27evEEIIi8UizGazEEIIm80mOnXqJLZt2yaEEGLMmDFi5syZfu396aefRNeuXYXVahVWq1V07txZjBkzRgghRG5urrDb7UIIIbKzs0WjRo3E2bNnhRBC9OnTR/z222/eejIzM4Xb7RZCCHHkyBFRt25d72dJYGQPXQlYt24dXbt29Q5FJ02axO+//+5N79OnD7Vr1/Yrt2vXLmJjY+nUqRMA99xzT7H3ue222wDo2rWrdy7rdrt59NFHadeunff61q1bi61nyZIljBw5EpPJhMlkYtSoUd40s9nMmDFjaNOmDX369OHUqVPs2rUrYD2nT5/m5ptvpnXr1gwbNoyTJ09y4sSJYu99rSMFXQkQhaxzC38ODw8Pyn2MRiMAWq3WOxR/++23cblcbNy4ka1bt5KcnIzNZitTvQXb+/e//52mTZuydetW0tPTadq0aZH1/e1vf+Omm27ir7/+Ij09nfDw8DLf+1pDCroSkJiYyLp167y95scff0z//v1LLNe8eXMyMjLYtGkT4JmnlpWcnBzi4+PR6/Xs27ePxYsXl1imb9++fPPNN9hsNmw2G/PmzfOpr2bNmmg0GlavXs22bdu8aZGRkeTl5fnkvTDy+Prrr8nKyipz+6815Cp3JSA+Pp5Zs2YxfPhwVFWlXr16zJw5s8RyRqOROXPmcPfddxMZGcmQIUOIjIws070nT57MiBEjWLRoEfXr1yc5ObnEMjfeeCMrV66kbdu21K5dm169ennF+Mwzz3D33Xfz6aef0qJFC7p06eItN378eJ566ileeeUVPvnkE1555RX+7//+jxo1apCYmEjdunXL1PZrEUUUHr9JqhR5eXlEREQA8Nlnn/HVV1/J1eIqjOyhqzhffvkl7733HoqiEBsbW6qeXVJ5kT20RFKFkItiEkkVQgpaIqlCVPg5dLNmzWjUqNHVboZEUqHYv38/u3fv9rte4QXdqFGjUh82kEiuFVJSUgJel0NuiaQKIQUtkVQhpKAlkiqEFLREUoWo8ItiEsmVRlUF63cfYfvh08SEh/BH+j7+OniShNhIHrm1N92a10UIwaa9x/h9yz6qR4VxU49WxEWGXe2mS0FLJAVxqyr/9+737DhyGrPVgQJcMKXMtZzl8Rk/89HDt7Jg3U5+WbsDs82BXqfl88Wb+GTK7TRMiCuy7hMZufxv+VYy8ywM6tycxBZ1fTzIBAMpaImkAEvT97P98GnybQ7gopgvkG9z8MH8Vfx18BTm83mcLjc5Ljevz1vCR4+MCFjvht1HmPz+jzhcHqeMizfvZVj3lkwd2S+o7ZeCllQZhBDsPHKac7kWOjSqSUSoqcQyblXl07T1fL0knTyLHbdQKel0w4mMXD8nEwC7jp4JmD/f5uDB937A6Va91yx2J7+s2cGY67twXWxEie0sLVLQkipBntXOhLe/5VRmLup5sT09uh+Du7Qottyb3y7lx1V/YXeWzp2xyaCjf8cmfLtsm19avfiYgGV+Wv2Xj5gv4HSr7D9xLqiClqvckirBv79bzoGTGeRa7JitDsxWB699+Qc5+UW7LHK63PyydmepxBxq1BMRYqR9o1rcP6Q73ZrXJdSoB0BRICLEyOO3JQcsu/3Q6YDX3apKg2Lm3JeC7KElVYJl2w7gKtQLCiHYuPso/Ts2CVjmwny2KPQ6DUO6teSWnq05l5NP7erRNKlVDYBp41NYuHE3aRt2USM6nLv6d6L+dbEB6+nUtBZ/pO/1++FoXe86asaVzYNMSUhBS6oEUWEmMvMsPtc0Wg3R4SFFlgkzGbguNoL9JzL80ox6HeMGdWHCkMSAZbUaDSldW5DStfghPcCQbi35eslWjp3LxuZwoVUUqkWH8cHDw0ssW1bkkFtSJZiQ0o0wk8H7WaNRiAkPoUPjWsWWe33CUKpFhWHSX+zbQo16ujavw9hBXYopWXqMeh1fPDWap0f1Z3ivNvz9zgH8+M97CTUaSi5cRmQPLalUnM0xk5VnpWFCHDqtxnstdf1OnC43GkVBp9OQ3LYhT97eD42m+H3eBtfF8ubEofz7+xVk5llIbF6P0f3aUy8+lrU7DzN74QYsdic39WjFLT3blFhfURj0OoZ1b8mw7i0vqXxpkYKWVAocThdTZy1g095jaBQNWo3CtPEpdGpSh/ve/IYTGRdXt3UaDR2b1MbpdvP54k0oCgzs1Iwa0f7+yzftOcajH/7k3VM+k2Xm8JkshnRrwb/mLfHuR+8/kcG2Ayf555hBV+6hLwEpaEml4KNf1rB252GfhaXHP/6FafelkGuxecUMnj3eGb+s5f2fVmGzu0CBjxesZdp9Q+jRqj5CCNL3n2D19kMsWL/TK2YAm9PFjsOn2XPsjFfMAFaHkyXp+5h8cy+qRV19E8+ikIKWVApS1/tvLwlVsGXfcVTV38gj22z1sfIyWx28MGchaa9N5JUvF/Pb5j2YrQ6/cuDZzrI5/PeNtVoNp7PyKrSg5aKYpFKg1/n3PYqi0KJuvJ89tE6rQafT+uW3u9xs2XesWDGDp5cOZGPtVtVibbUrAuUi6NDQUJKTk0lOTuaHH37wSTtw4ADJycn07NmTN954ozxuL6mC3Nmvg9eQ4wJGg45ebRrw6rjBRIYaiQw1EhFqpFnt6hgCCBoBB09mlsqQxK2qGHRajHotWo1CmMnAlBF9CCnUhrLicqts2nuMzXuP+e2bB4NyGXLXrVuXpUuXBkybOnUqr776Kt27d6dfv36MGDGCBg0alEczJFWIkcntybHY+eqPzThdKo1qxvHyvTeg12rp2boBC6dNZPuhU8REhNLgulg+XrCWzxdv8s6Dw0wGxgzsTIOacZj0OpwlGJW4VYGiCB68sSeKotC3XSNqV4/G6nDy7g8rWLhhN0aDjrsHdGZ03/alOjV14GQG9//nOxxOTyBAo17HR4+MoEERBimXQrkI+sSJE/Tp04eEhATeffddatSo4U3bsWMHPXr0ADyOzlasWCEFLSkRRVGYNCSRiSndUIVAq/EdXG47cJIv/9iMy61ye592TEjpRuNa1fh6yRYUFEb360Byu0YIIah/XQw7Dp/BrRbfQ7rcKn9s2cfsJ0eRZbaycONuZv26jgMnMjzz83x4+7tl5JgtPHBjzxKf4bGP5nMuJ7/AFTuPz/iZ754fU/YXUgTlIuiDBw8SFxfHl19+yZQpU/j888+9aWqBlxgdHU1Ghr+Vzty5c5k7dy6AjAcs8UFRFLSFesNvl23l3R9Xenvj9P0nuHtAR2IjQjl2Nod8m4NFG3fTvlFNosND+PjR23h93hJ+Wr3dZ3U8ENsPn+brpem8/+NKrA6n30ksVRXM/HU9fx46zYtjBhW5YJaRm09WntXv+tkcM1lmKzHFWLSVhXKZQ8fFeRYORo4cSXp6uu8NC/yy5uTkEBvrP9y48847SU1NJTU1lZo1a5ZHEyVVBLeqMv3n1T5bTPk2B5+mbeDN/y3jVFYeeVY7Czfu5r63vkEIgVGv4+lR/YkINZaq/n9/txyL3V/MBVm38zAT3/nWp8MqiMmgD/jjIQQ+Vmp5VjsZufl++UpL0AWdn5+P2+2ZnyxbtszPSX7Lli1Zv349AGlpaSQlJQW7CZJrCIvNgTvAtpXD5cZRYPFLAIdPZ7Fmx2Ee+uAH+kyZXuxJrIKUNDS/UP+h01kMemoma3ce9ksPMxlIatMQYwHxmvQ6+rZrRIhRj9Xh5LEP55PyzCxueWE2I178L0fPZpeqfQUJ+pB7165dTJgwgfDwcPR6PTNmzCAtLY3MzEzuuOMOXnvtNcaPH4/T6eTGG2+kYcOGwW6C5BoiPMRIiEGH2WovMa8qBP/8fBGZeZaAPwKB0Gk1AZ0ZFEVGnoUnZy7gq2fupFa1KJ+0f94zkGqRofyydgcoMCyxFQ/e7Jl7/+vrP1i945D3BJjZmskD//mOn18aVyY3RRU++mRKSoqMnCEpllXbD/L0J7+WStQGvdan5y4OjaIQExFCRKiRQ6eySt0erUbhvsHduH9o91KXSXr0A59pA0BkqJEZj4ygWZ0afvmL0oU0LJFUehJiI+nSrA4l9WNGvRadJsD+dCEUICEuks7NavP+5Fv4fOodtG2QUOr2qEJ4t6ZKS1GdcFmdCEpBSyo1u46e4d435rE0fZ+fQ7+ChJkMdGtej4iQko8sajQKZqudvw6eYvxb3zJ/zXZmPzmKn18eR4ih5FlqmNHA4FKcky7I9R2b+hnDRIaavA4VSou05ZZUav7z/QryAgy1DTotbRom0LVZXc7lmOnZugG9WjXg0OlMHnz/Byw2B7mWwEN0tyrIK5A2ff5q+rZrTK24KCbf0ovpP632HugINxno1LQ2m/YcQ6vVoKqCh4cnlVmIT9zeF7PVzuodh1GAWtWieHPSsDL30FLQkkrNodOZftcMOi139OtAp6Z16NikFiGGi+aaDRPiWPDyfRw8lcnh01k88fHPlLQ+ZnM4+Th1LU/clsyo5A60qBPPdyv+RKdVGNG7LS3rXcexcznMTF3LgRMZ7DtxjrM5ZqpH+R/XLAqTQce/JgzFanfidLmJDCvZY2kgpKAllZoOjWuzcOMunz1ip9vNt8u38t2KP1EUeGPiULo0q+tNVxSFhglxNEyII9Ro8Dk+GQi3Kkhdt5OVfx7gv1NH065RTdo1umgfkWe1M/6tb8jMteBSVXYdPcOijXv49tm7iYkILdPzhBj1l2UvLufQkkrNw7f0IjYiFNP5ua1WoyAE5Nuc5Fnt5FrsTJ25AKfbf2V7895jxc67C+JwucnItfDWt8v80n5c9Rc5+VZc5/er3aogz2pn3tL0S32sS0YKWlKpiY+J4Md/3suUEX2474auaLX+X2khYPfRsz7XVvx5gEem/+S3VRRmMtC5aR3iY/x9ZQtgy77jPtfyrHYWb97jd4LL6XKz5/i5S3yqS0cOuSWVnjCTgVuT2gLw3YptfvvMORYbv23aQ6t6F89O/+eHFX5DbZ1Gw/1Du3NHvw7sPHKaB9793mdxDPBxu3siI4d7/vU1uRZ/izOTQUf3FvW8n612J+n7TxAVZqJF3RpBj2nlfYZyqVUiuUrc2b8jn6atx+rw3Qf+bsU2asVFcntyewDOZJv9ypqMOurUiPY6Tmhcsxo7Dp/Gfn5POcxk4JFbe3vzv/W/ZX6ugwFCDHrqxkdzY49WACzfdoBnZ6cBnv3m+JgIZj562yUvfBWHHHJLqhTjbujKkG4t/YxMLHYnny/e5P3ctoH/oR8hoE396wDPwtn0h4YzaWgiLerWoHfbhnz08K10alLbm3/bgZN+dei0GoYnteHzqXdg1Ouw2Bw8OzuNPKvdO6c/cDKD179ZEpwHLnz/cqlVIrlKKIpCz1b1Sduwy29IbStgvfXUqL7c++Y8LHYndqeLEIOeiSndfFaljXodYwd2YezAwP6561SPJiPXt4cOMehJal2fT35dx1+HTlEtMgwhfA93uFXByr8OXu6jBkQKWlLl6Nysjt8c1aDTMqhzM+/n2tWjmf/iOP5I30e22Uqv1g2KDDZXFI/e2pv/e+8Hrw25yaCjca04nvvvIrLyLDjdKnqtxrv6XZDycLIPUtCSKkiYycDrE4bw1CepIMAtVFrVu47/u8nXq0iIUc+Qbr4mmkII1uw8zKKNe6gWGcqI3u2KjA7ZpkECn065nc8WbeBUZi7Xd2pKdp6Nvw6u90abdLpVFPAJHB9q1DPuhuBE5SiMFLSkUpOZa+GPrftQgH7tG3uHzN1a1GPRtInsPX6W6PAQasZFFV/ReaZ9/Qep63eRb3Og1Sj8b8U2Pnz4VlrUjQ+Yv3Gtarxy72Dv54en/+gXOlYAtapFkptvJ9RkYNygLt5V+WAjBS2ptKzbdYQnPv7Fuwr9nx9W8ubEoXRt7rEK0+u0tKx3XanrO5GRy6/nxQyeuW6uxc7r85bw2ROjSlVHx8a1Wb/zCPYCTghDjHompnQv9zA4IFe5JZUUVRU8NzsNs9WO0+XG6XJjttp5dnZamRwSFGTv8bMBr+8/6e/3rihG9G5LfGyE91RWqFFPnerRDOrc9JLaVFZkDy2plGTk5Xt75oLYnC4yci2XFN2icc1qBDpUXa9G6RfLwkwGvvr7Xfy6fifbD52mQ+NaDOzUFIPeX2pCCDbtPcbW/SdokBBHUpsG6LUln9cujqALevv27UyaNAmNRoNOp2PWrFk+bobGjh3Ltm3biIyMpFmzZsyYMSPYTZBcA0SGmopwuieILIXzv0DUqhZFv/aN+X3LPvJtDjSKx8H+1FH9ylRPiEHP8F5tGd6r6DxCCB77aD6b9h7DbHUQZjIQHxPOnCdHE2q69BXwoAu6evXqLFiwgKioKNLS0njppZf47LPPfPJMnz6dxMTAgbQlktJg1OsY2ac9Xy3ZgsXuBDzD21HJ7QP2hqXl+bsH0qdtI9I27KJaVDgjk9tTt0Z0kFp9kXW7jrBpzzHvXnm+zcGxszl8uWQL4wd3u+R6gy7ogk719Xo9ugAxiR5++GFMJhNPP/00N9xwQ7CbILlG+NuNPWhwXSxfnz/VNKpvewZ3aX5ZdSqKQt/2jenbvnEQWlg063cd8TN8cbjcrN5+qGIJ+gJWq5Xnn3+emTNn+lx/6623iIuL4/Tp0/Tt25fExESio6N98khH+5LSoCgKKd1akNKtbO5+KgL1r4slxOBx33sBzflz2pdDuaxyu1wuRo0axeOPP06LFr4v+4IT/vj4eDp37szevXv9yktH+5KqzsBOzYgON6E7f9xTUSAi1HjZBidB76GFENx7773ccMMN3HzzzX7pOTk5REVFYbVaSU9Pp169ev6VSCRVHJNBx9yn72T2og2s33WUxjWrMXFIt1IbwBRF0AW9YMECvvvuO44ePcq8efNo3749N9xwg9fR/ujRo8nJycHpdDJlyhSfOfeVQLj2I8zTwXUAjL1RwsajaAKb9kkk5Ul0eAiPDO9dcsYyEHRBDx06FIvF/4zoBa6m03zh2o/IGAkiDxDg2oOwpUG1X1CUy4v7K5FUBK4pSzGR9x6IXC6ayTtBPQv2P65msyRXELdQyXKYcYvgB1uvCFxblmLuA/7XhBnhOlJi1AVJ5SftRDpv7/wFt1DRKBoebj6YobU6Xe1mBZVrqofGkAQUGlorESiGzgAINQ/h3IUQ/nF8AYRwI+wrEJZvEa4j5dxYSTDZk3uCf+34iWynhTyXjRynhbd3/sKOnGNXu2lB5ZrqoZXwiQj7QlAzQOSDEgHGvghdO0TeW2CZi+eVuBERT6AJvXjCRqg5iHO3gnoScAIahOk2NNEvXaWnqRzku+ysPLMLp3DTq3ozog1lt7G+HHKdVuYcWMZPxzaS7/J1+Gd22fnm8BrubtCbWqExmLTl43TgSnJtCVoTBdVSwbYY4T6CYugC+o5g/wNh+cIj8gvkvY7Qd0DRe7xciLy3QC3YK6tgm4dqS0Zj6n9lH6SSsDv3BA9u+BSH6kIVKm9rdLzSbhTdq1+Zk0erz+7myc1f4BBFR5tceHIrq87uwi0Ekxr3Z2T9nkXmrQxcW0NuQFEMKCEpaMLvRzF0QlEUhGWer5gBRD7COv/iZ9uiwBWa3y2/xlZynt06jxynBavbgV11YXbZeH7bN7jU0oVzvRxWn9nN1C1fFitm8CyS5TitmF02Ptq3mO3ZR8u9beXJNSfogCghAS5qQFPgulJESBPXIYSrfBy+VWbsbidnbDl+11UExyylP198qUzfuwi76gyYpkFBp/h/9fNddn45vhm723lFfnTKAyloQAkbA0p44YsoIbdc/Bz+QBGlrYiMkQj3Kb8U4TqKmvsiauZ4VMs3CBH4C1YV0Wu0aAOIxi1UYo3lb8hzzp5bZFqEzhjw6KWCwrLTOxjw+8v0X/wS/9z2LQ7V/8z1SWsW+/JOoVbArS8paEAxdITIF0BT3dMTa2ujRL+Poq3lzaMJvQ2MKQQ8AS/yEPn/9b3k3IvIGA6WL8GxHHJfQWSOC+hNQ6h5CDXf73plRqNouKtBb0ILLDSZtHr6xbcmUh9oRBRcusY1KTItz2VDDRDVSiA458jDrjqxqg4WntjKmzt+9qabXTYmrvuYO1e9x/3rZzJ06b/YmXPcr56riRT0eTQhN6JUX4lSYwOa6n+gGP3Pa2ti/g3G6wOUdoP7kM8VYX4TRA5w4VfcCq6d4NxyMY/7DGrG7YizvRFne6FmTUKo/hEdKitjG/bhyZY30TQigQZhNXigyUCeaX1LyQWDwMPNBxOtDzxNCtSvGgNYCrpQWXhyq/fzGzvmsz37KGaXjVynlXP2PB7dNLtCDc+loAugKEqJJqBKyC2gFNp6UULBOND3mnOPf2FhBdd+z39VMyJzHDi3eRbkRD7YVyJynr6cR6hQKIpCSq0OfNFzMvOSHmF0/Z4Bh+HFYXHZyXaUffQSZ4zg5+SptIuuh1GjI1RrIExnxKTx//uGa01UNwWeBrhUl3dUteL89ptvulqh9rKvqW2roGDsC4bu4FgHwgaKCfStUUKGerMIYQV9C7CfgIJDO8WE0DZCZD0A9tVAYQMWJzhWIIQLRbm2/zR2t5MX//yO1Wd3oygKNUyRvN7hLuqGVSt1HUatnpmJkziSf44j+edoFlmT746s48tDK7EVWDAL0RmIM0ZwzOofPL5B2MXAcoEW0sT5+1QUru1vzSWgKBqUmOkI5zZw7gBdE9B39Gx/CQci5x9gX+wJlITm/D+nZ9HN2Acsc8C+3HNNUiT/2ZXKsjM7vItSZrONBzd8wo99nkCjaHALlflHN7LgxGYi9CHc06A3HWIbeMurQuWbw2v535G1AIyom0iP6k0Z37gf2Y58z1BagYSQGF5rfwf7806x58+TWN0XvYhoFQ2vdbjT+/nmOl2Yd2g11vM/BgoKMYYwmkYkXIlXUioqvaCFUMF9BDRRKJqyhTIRwo2wfA6Wr0HRQuhYlJARfmFUhPs0IvvR8/NfAbrWnkU01yHPopeuEYRPRli+AVsaUDC8aAiE3IZi6o/Q94CznShazDowdL/me2eAhSe3+a0wW9wOduYcp1V0HV7Y9i3Lz+z0CjA96xD/aD2c/te1AeCdnanMP77Rm/7h3kUct2QypeVQnmp9M1NaDsWuugjXeSJA1gurxuH8c3xxcDmqEIToDLzUdiR1wi56EJnU5Hocqov5xzZ5onFE1eafbW8vt9Cwl0Kl/uYIx2ZE9mQQDsCNMCShRL+BopTOhE9kP+7pTTlvEpj3KsJ9AiXi4Yt5VAvi3DAQ2RcLurZB5gg8va8LXLsQtt/P11N49dTumWMbuqCgBFhbLYCuFUrU66Vq+7XMaWs2K8/u8ulN81123tudRv/r2mBzO/nlxCafdKvbwbwjq9mec5RHmg+hbUxd9Brfr//1CW3YnXuCHTlHaRFZmxomX2cDWkXDI82H8HCzFAQCTRnXA64EFa9FpUQIKyJrkuf4o8gBYQb7Eo/zghLL2lEz7gH7ArxiBs/ClGUOQlzsGYQt7fyRy8KoQMEexIa/mAGcnjozbvX839AbKML3svY66WzhPIMS2mIsJLgQrYEWUbU4bs1CG+Cre2HxLN9lQ1PE+bm/co7yyKbZ7Mn1DQWbYc9j3JoP+eP0X5yy5bDkzHbGrf2Qc7ZcdmYfY8iSaXRLe4ZuaX/n/zZ8gsXtCFj/1abSCtqzqFR4u8AG1u9KLCry3gXn5qJSEc7dqPZ1nsUt9QSBNzrKggNcxxCW70FTjcDCB+y/oWY+hJo5BjV7KsLp72+tMmNzO/hg90JuWfYmY1dPZ8WZnUXmfbh5Ckk1WhCmNRKuM9EwrAbvd7kPjaKhScR1uAP8TZyqmw/3LPJYgmmKdlhvdtmYfWCpz7Xvj6zDXOjwRr7LxucHlzNx/cecteci8OxVb8w8wLg1H5bp2a8U5TLknjVrFp988glarZbp06fTtu3FwFwHDhxg3LhxOJ1Obr75Zp544olLu4miJ6CRR2keyfYzUMQvrMiHTM9eqUAPoX8DDEXnLzVWyP8Y1HMU/QOhgiPt/P8VhH0xxMxCMXS4zHtXDB7a+Bk7co7jUF0ct2by3NZveLrVzQys2c4vr1Gr59X2o8l32XGoTmIMFy35IvQh3N/kej7YsxCb++J6hFO4+ezAUr45sgZngBCuBTllzfb5fNSSgavwlpRQ2ZR5EHsAa7Gjlgz2552mUUTgIHZXi6D30JmZmXz44YcsX76c2bNn8+ijj/qkT506lVdffZWVK1eSmprKwYOXaAdtSASlcISEUAi7u+SyAW23L1Cw93SCZTqYhuA7TFZA19Jz/BIo9WtUz+AzxC8W4bFAy3utlPkrNvvyTrE/74zPQle+285He38rtlyYzugj5guMrNeDRuGBxXThR6AojBq9d/HsAn3iWxKq9f0+hWoN6ItZoLyU/fHyJug99Lp160hOTkav19O4cWPOnTuHqqpoNJ4v/Y4dO+jRowcAKSkprFixggYNGhRXZUAUxQCxnyOyHwH3MUCB0NEooWNLLhw2HvJe9T9hFRAnirEnhE9A2H4DjKBvB3lvgHCBUg2MN4A9FXCAUPGIPx//ntj/l75EXIfKXqYCctaWiwgw1ch2XpoonKqLQ+bAweWKQsFjfioEfLz3N749soYxDfuwM+c4e3JPEGMIRXGAQ3Vh1OppHBHP7kJz7QvoFS0R+hBm7luMVtEyuGZ7EkLKtstSHgRd0FlZWcTEXHyw8PBwcnJyvNfUAkOh6OhoMjL8T96U1tG+omuEUu1nhLABehSldIG+lJARHhPL/H97rLdKLBCBomuMEt4Y4c5AnBt8cdVbWMH+E8R8hqKeAeFAGDrDuUGl/MEoAX2bkvNUAlpH1/ETtIJCu5j6zDmwjB+PbUCraBhZrwe31ulW4lbQrH1/+BiHFMazo+B7PwFYCwzRrdYsXtv+ozevXtESZQjlgYbX0yKqNhvO7WNbVmDPNMPrdGXS+o+xuhwoisIXB1fwarvRJFYv2ob8ShD0IXdMTAzZ2dnez2azmaioi8v/F3pq8Pjojo2N9aujrI72FcVUajF78itowu9FiXzN34zTDxMYLx56F9YfA5ydzoO818CYhBKSgqKJI/CrNYES63+yy4cLz2EAJQYl8h8lPk9lIEIfwiPNhxCmM2LQ6AjTGqluiiBUY2DWvj84ZsnkcP453tudxvQ9RZw9L0DqiS1FOvoL1xnpFNsgoGVXIC4I3ync5LvsmLQG2kTXxS1EwEMcXWIb8cuJzeS77KgI3ELF7LLx8l/fXXIo22ARdEF369aNZcuW4XK5OHjwIHFxcT4ibtmyJevXrwcgLS2NpKSkYDeh9JgGgCYOPz9jF1AiIe5/vvva6jkCGoY4tyDODkK4Mzw/LqF3FzpDrQM0oG0AoeOBIubxmgQIGQkRU1Cqp6Hoyj4dqajcVLsz3/R6lKda3sQ/293O590ns/rcHp+e1up28N3RdSUeeNAHWMXWoNAptiEzuk1ketfxl2TBZXU72J5z7Pzhi8BHMFtH1wl43eJ2kO8u7RpJ+RD0IXdsbCwTJkwgKSkJrVbLBx98QFpamtfR/muvvcb48eNxOp3ceOONPqFmrzSKYoC47xHmjz0WXuoJLm6FhUDky2j0hdzluPYVUZsK6imE+R2UqJdRwh9GaGqA5b/n5/huIB9cm8C9G7R1wb0Hvy0s9Tg4NqBEvlihLJCCRXVTJENrezxtHrdkotVo/HYfBQKb6iS8mK2nO+v34r3daT77wTGGMN7tPNZrMDKwZjv25Z3GIUq/dqFBIfX4Zhad2Bpwzg9g1OgCjg60ioaQq+yXrFy2rSZOnMjEiRO9n9u1u7gt0bhxY5YuXVoet7003IfBsRLUo/iKywI5j6Fq66AxtAI8xx1xbiqmMhUcq4HzJ7fC7kDom3kMYAoapwgzuPcSeD9aeEYB7qOgq3uZD1exSQiJ9rPWAogzRHhNMotieJ1uHM7P4KejG1ARNAyvwYvtRvrU1zm2od9WVEmoCOyqCzuugJuiYVojDSLiGV2vJ18eWoXlfI+sV7Q4VBf9Fr9Iy6jaPN9mBNeFRJfp3sGg8hqWBAHhPovIvBdcOwgsLhdk3YNwn1/pdJ+gSCuvC2gLidB9EgJ6KinJWKXq9c6F0SgaXm03igidyXO8UWskWh/KK+1HFVtOCMEbO+bzy/FNKIqCXqMlISSG2qG+6zEz9/0RcA5cZHsKvfMLJS9c1StaqpkiSarenIlNBvBSu9vpXq0JjcLj0SgarG4HVreDzZkHmLhuxlVx5l+pbbkvF2H9oeRVbmFB5M9FiXwcdI3xt04rhKHQmoChs+fgR6m/VxrQJoA2HtW6AJw7PR5VjH3KtPBXWegQ24D5yVNZfXY3OkVD9+pNS3SnuyFjPz8f3+Rj8LH23B4Wn/yTQQWMVPab/d1CFYVBo0MRYC80PDdp9CTHt+SI5Rw9qjXjjga9vFZoSTVakFSjBTcve8PHf5nAsxe+OfMgXeIalboNweCaFjRqDiUfY3Sf98UNiiYcEfEk5L0OwgLnjQF9yJ+OCLsD5bzxiqK9DhE2CfJngLB7jGEEeAxMCt87xHOOOupfiHM3e+4r8hHWcNA1h9g5VfIkVpjOyPUJbUvOeJ7396T5WW9Z3A4WntzqI+j6YTU4ZvE/4xyIeFMURo2O/eYz3rmzXtHSvXpTXmw3sshyxy2ZZNr9vcyoQmBxXfkFsmt6yK2EpJSwhQQo4SimwQghUPP/C/kzPZZm+m4EXh1XwLHN54omfBJK3I8okc96TlNV/wN0DT2r6Bg9bQidgFJjFZq4r8H+u2cOfWF7TJg97ovsvwfjsSs1NreD/ebTAdOqF3I+KMow5G0UHs9/Ot9Lq6jahOmMhGqNdKvWmOfajCiyzNqze7l79fsBvYsqikLnK9w7wzXeQyv6Vhd7T7Qeyy9NHIgsT2+KG5RwhKY6mN+G/M+B85E11TwCOwy0Ily7PSendBdjXyu6ut5FLgUQcT+BYwO4j4Ohsyf9AvaV+JmIinyEfTWKaVDwXkAlw+LymIoWtaXVKsp3OymzDKaZ6zL2odNo+LT7A+Q5rWgUDWG6wqbFFxFC8Mr27zG7bH5pEToTL7cbVWz58uKaFjR4ek8ROhJce0BbD0Ubj5oxDpzr8Qy3T0HmWDyLWAXn2zY8hzZM+Do0cELeKwjzfxCGRJTo/wQcJiuKBozdAjdK1wIca/E1FQ3xDLuvUZyqi/vWfsSR/IwilyMOms/4fE6Ob8l+8+mArngLo6CwK+cEYTojGfY82sfWJ4yiBXkhcEBhwnRGPuo6gSaRV8eLSaUVtFAzEbmveNz5aKIh/CE0IcMuqS5FEw2Grp56XYfBtRXf01X5BOyNlRBQaoBa+Jij52AFjpUIy7coYaPL1p6wsQjb96Bm41mE04MmFiXkpjLVUxUwO2289Nd3rDq7u1hhalGoEeLrkGB0/Z4sOb2d45ZM7G4nBq2eWEM4Ryzn/MorCry182eyHPm4hUBR4KFmg7mlTteA9zNqdBg0OvIDHLapFepv/XilqJSCFkJFZIz2uB7CDe4cyH0OFS5Z1F7ch8uQWef5JhTZUCvYfoJSCFqoeSAcKNo4FG11iPsRkf8xOLeDoStK2DgUTRHRO6owT275gvSswyXuJ4fpTAyu6XvM1KQ18N/u/8fmzIMcs2bSNrou8aYo7l83k115F88IGDV6ovWhnLBm4Sow735396/0rtGCuACBARRF4aFmg3lz58/eIHhhWiOj6/Uk9CoMtS9QKQWNc5MngmTBLSSRD+YP4DIFLQgLfKhC19Iz/FbteHpvhyef6sKzN13EF64EP2cezyuPeIxbcCHQQthElPCH0UQ+e1nPUtnJcpjZmXu8RDFrFQ0R+hA0AX5cFUWhU1xDOnHRInFOzwdZe3YvXx1ehcVlJ6VmBz7et9hHzOBZqd6UeYCBCf7ntQGG1OpIndA4vj68GrvbxfC6XelZvdklPGnwqJyCVjMJKCDhH0upLAjVDNn/h7/RRxhK9BugrYvIfR2s885ft3lc+aLBY5tdaE9bCUcJm1T8PXNeAMdSLm5/uSD/Q4RQUCIfLrrgNYBTdRfpSqggbqFyypbNh3sWMbVV6aYlidWb+JyM+vboWjIcvttPOkUT8Cx2QdrG1KNtTL1i81xJKue2laEb/nNaHRj7XV699t8CG5rom3mOTyoGcKzA30mBCUJHQuhYz4KWEg7ahhD1DoqhfQn3XIS/1YkAyyxU+4arfnrnalLDFBVwuBupC/E7SeUWKguOb77kQHiTGg8grICDAw0K0YYwOsVWrsMxlVLQiiba40ZXCT//Lwp0jVAipl5exaqZgK6GzotcODb6hbw5nwFF3xJN5DNoqv2EJn4zmuppaEx9SnHTogRrh+z7EZmjEOLqnuC5mrzTaQx1QuOI1IcQoTPRODyeJ1veGNCazKY6uXfNh6w5t4fXt8/nrR2/sC+vdNZifeJb8mybW2kQXoNofRiDarbjk8T7K6Rnz+JQRAXvAlJSUkhNTQ2YJtRccGz07B3r21726SThOobIuNFjyOElBCIeRRM2FvXcUM/2VmGUMJTqSzw/NGVEzX4abMU5NjRBxCNowsaVue6qghCCw/ln0Spa6oTF4RYqI1f8m6OWjIBOE3SKBqdwo6AQpjPwZMubiNKHkuu00rVaoxKH0ZWBonRROefQ51E0kWC6zGF2wfp0tRERT3ucFaAFVI/j+9C7PBncRUQaDHngksQMoEQ9j3AfA+e6InLYPMHmr2FBK4pC/fAa3s9aRcOsxPu5d810jhcKXyMQ3vhTAoHZZeeFbd8SqjPiFioaReGpljcxqGb7K/kIV4zKNZ64AmhCb0OpvhwlZjpKtfloYt6/aBiiqR64kOJvYFBaFMWEJu5ziHqXIn9ftbUvuf6qSrQhlAeaXO8TrrYoVARmlw2r20G+y86/dvzk3WqqakhBB0DRhKMYuvjEhwY8geoCYS/ZZU6JWOYQ2ImgCSX8/suvvwrSP6EN7WLqE64zoVO0hGmNpYpuqaDwZ7bHV9hpazb/3rmAKZvmMP/YxgoVGvZSqNRD7iuNom+J8DP1pOQDHqVBLeJUUNhYFF3jy6+/CqJVNPy70xj+zD7KvryTNI5IYEfOUWbsW+ztgRUCLTsqVDdGcNh8lvvWfUS+y45bqGzMPEDaiXQ+6HJfpfUWE/Qe+sknn6R79+4kJiYybdo0v/RDhw4RGxtLcnIyycnJrFmzJthNKD+MAwr5CcOzIFbCXnOpMN0AhW2HlXCUkNsvv+4qjKIotI2py/C63WgbU5dR9Xvy705jGVyzPUNrdeK+Rv18tqP0ipb64dVpFHEd7+9ZSK7T6nVEYHU72JV7gm3ZgT19VgaC3kNPmDCB119/HVVV6dWrF6NGjaJ+/fo+ebp27UpaWlrgCiowiiYM4r7wBGV37fX0zOGPoJiKGIqXpe7wSQjH2vM+y84btoQ/jKKT8+ey0i6mHu0KGHs0DI/n0/1/kOey0S++Nfc3uR6AfXn+PrftbicHzKd9ylcmgi7oJk081jcajQadTodO53+LLVu2kJSURIsWLXjnnXcICyvJlW7FQdE1Ron7Nvj1KiEocV8jnDs8ro4MHVE0V8/IvyoxIKENAxL8/Zu3iqrDCWuWz5DcqNXTLLJk19EVlXJbFJs3bx4NGzakdm3fHiYhIYH9+/ezYsUK6tevH3BYPnfuXFJSUkhJSSnW0X5VRNG3RDENkGK+Avyt6SCiDWHoz7t2CtMa6RLXiJZRlXdUdEmGJWazmQEDBvhdHz9+POPHj2fp0qW8/PLL/Pzzz4SEFB1H6sCBA0yePJkFCxYUmac4wxKJ5HLJdlj46dgGjlky6F2jBT2rN6sU1mFBNSwJDw9n7dq1AdM2bdrEU089RWpqakAx5+bmEhkZCcDSpUu9Q3SJ5GoQbQhlTMPSmOhWDoL+UzRp0iRyc3MZPnw4ycnJpKenA3DPPfcAsHz5cjp16kTv3r35/vvv+fvf/x7sJkgk1yyV2pZbIrlWKUoXFX+yIJFISo0UtERShZCClkiqEFLQEkkVQgpaIqlCSEFLJFUIKWiJpAohBS2RVCGkoCWSKoQUtERShZCClkiqEFLQEkkVQgpaIqlCSEFLJFUIKWiJpAohBS2RVCGkoCWSKkTQBf3CCy/QsmVLkpOTuemmwMG3X3zxRXr27En//v05duxYsJsgkVyzlEsonOeee45Ro0YFTNuxYwerVq1i1apV/PHHH/zjH/9g9uzZ5dEMieSao1yG3NOmTaNXr17MmTPHL23ZsmUMHToUgL59+7J58+byaIJEck0S9B568uTJvPDCC+Tm5nL99deTmJhI06ZNvelZWVnUrVsX8MQlcrn8Iy7OnTuXuXPnAlxzjvYlksvhkgRdkqN9gMjISAYNGsTWrVt9BB0TE0N2dvbFBgQIlXPnnXdy5513Ah7vhhKJpHQE3dF+Tk4OUVFRuN1uVq1axfDhw33Se/fuzRNPPMGDDz7I8uXL6dix46U0QSKRBCDoQ+4pU6awY8cOXC4Xw4cPp3379oDH0f6cOXNo1aoVXbt2pWfPnphMJj777LNgN0EiuWaRjvYlkkqIdLQvkVwDSEFLJFUIKWiJpAohBS2RVCGkoCWSKoQUtERShZCClkiqEFLQEkkVQgpaIqlCSEFLJFUIKWiJpAohBS2RVCGkoCWSKoQUtERShZCClkiqEFLQEkkVQgpaIqlCBF3QkyZNIjk5meTkZOLi4pg/f75P+qFDh4iNjfXmWbNmTbCbIJFcswTdp9iMGTMAcLlcNG/enIEDB/rl6dq1K2lpacG+tURyzVNuQ+6FCxfSp08fTCaTX9qWLVtISkpi4sSJ5Ofnl1cTJJeJEIKty7az6L9LOXng9NVujqQUlEsoHPA4y7/go7sgCQkJ7N+/n/DwcF599VWmTZvGSy+95FdWOtq/uljNVh7t/RynD53FaXei1Wu56f9uYNwrd1ztpkmK4ZJ6aLPZTGJiot+/WbNmAZCfn8/GjRtJTk72K2s0GgkPDwdg1KhRAUPh3HnnnaSmppKamkrNmjUvpYmSy+Trf/3IkZ3HMGfnY7c6sORamT99IYd3HL3aTZMUQ9Ad7QP88MMP3HjjjWg0/r8Xubm5REZGArB06VKaNGlyKU2QFMPujftZ+f1aIqtFcP3dfYiuHlWm8tlnc/jpvTScdt8wRVazjc2L/6ReyzrBbK4kiJTLkHvu3Lm8+uqrPtcuONpfvnw5zz//PGFhYURGRkpH+0Hm8xe/5X9v/4wl14rOoOOrV3/grSUv0KBNvVKVP3X4DGObTMbtUv3STKFGqtWKDXaTJUFEOtqv4Fz48yiKUmLerNPZjG32EJZcq8/1lj2a8Z+VL/vlP3ngNP9+4GN2rdtLVLVI7nvtTn74zwK2r94dsP4adasxe8+76A36S3gSSTApShfltigmuTzsVjuvjHqHdalbUFWVmPhoXk19msbtGxZZZl/6ITQaf+Ef+utIwPof7vUPsk5lA2DJtfL2hA9xOfyjgQJEVY/k/XWvSTFXcKSlWAXlpdvfZs3Pm1DdKgjIOpXNg92eIedcbpFlajdJINB4q3qdOL9ra+ZvxJZv87lWuGcvSL87ehETH13q9kuuDlLQFRCH3cnGRVv9rrudbn58v2iDnISG8XQZ3IGQ8It7/2FRofztnXv98uZl5eO0Of2uR8dHoxTq5XUGHWNfGuVzTQiBzWKngs/YrjmkoCsgbpcboQYWypnDZ4ot+/QXD/Hg+/fRoX8b+o7qyZt/vEDHAW398nUd3AFDiMHnmiHEwJAJ/Xn9t2ep3TSBkHAT7fu25vMD7xMaHuLNt+TrlYysOYGRNScwuu79rP1l0yU8paQ8kHPoCkhImImEhjU4vveUz3VFozDg7j7FltVoNAy8J5mkWxM5dfAM19WvHjBffL3qTPjXXcyc+sX5ebdCsy6NGTHlRgxGPZ/tejdgud0b9/PvB2ZiybEAnmH6tLvf5b21r1KnWa2yP6wkqEhBV1Be/+05xrd+DGu+DYRnlTtpRCLt+7Yusez/3vmZL178HxqdBtWlcvsTN3HHM8P98g2dNJDkkT3ZtX4f8fWqlUqQ8z9I84r5ApY8K7/O+p2Jb9xT+geUlAtS0BWUGnWrMz/3c1b9uJ7je0+SOKwTdZvXLrHcjrV7+Pyf3/oscM17/Udadm8a8McgPDqMzgPbAZB1JodPnp7L5sXbiK9bnfum3Unrns198jtsDr86hCpw2P3n45IrjxR0BafnzV3LlH/Rf5f6rVZbcq38+snvxfbuToeTyd2e5uyxDFS3ytmjGUwd8CL/nD+Vztd7BH9i/yk6Xt+O9b9u8blHaFQoA8ckl6mdkvJBCrqKYQw1oCiK3+qzMdRYbLm1v2wm51yuZ5vsPA67k38MfY3Xf3uODx+dzckDpz31KhASbkJv1OF2qYx7dTRNOzUql+eRlA0p6CrGkAnXs/DTJeQXmOeGRoZwXf3qTOn7PMYQI7c9PowO/dp404UQfPnKd9jy7X71uZ1unrtpGpZcm8+PRHh0GG8vf4nr6lfHGFL8j4XkyiEFXQWJrBZBfq4FhEfMrXo25+t//Yg1z2NIsm35dpp0akiXQe1JmTCAfVsOcXT38SLry8/xNzgxZ+dzdNdx6rUoeV4vuXJIQVchHDYHU5KfJ/tMjvea2+1m65K/cBQwIrFbHPy1Yhe71+3jf+/8QreUjtgt/otdJbExbQu9bukWlLZLgoMUdBViQ1q63yq0Pd/hZ/l1AafDhTPDzOLPlxddqeKxFHPZ/W2842r7m5RKri7SUqyKYLPYOXssI+Cxx6KszkqFIKCYQyNDGCRXtiscsoeu5NgsNl66/R02L96GTq/FbvVd2NLqtLjdbgiSybU+RE+N2tWYMusBatQNbIUmuXpIQVdi8nMtjG06mewznhNYBY8+msI8K88RseGcPZoRlPspGoWHP5jAoLF9g1KfJPjIIXcl5sf3fiX7bODjlC6nG41Og93iwBhmCJinrAgh+ObN+Xz/7gJczsDnpiVXl0sW9IwZM2jSpAnNm/uaBi5YsIDExES6d+/O77//7lcuIyODlJQUkpKSeOyxxy719tc0qqqyLnUzqTMXFzmUdjlcWHKs5GXmIdweY5ALBFok0xl0GEMNaLTFfCUEHNlxjE+f+Yp/3vrmZT6FpDy45CH3Lbfcwrhx42jT5qKBgtvt5plnnmH58uW43W4GDBjApk2bfNznTJs2jbvuuos77riDe+65h6VLlwb0DioJjNvt5ukbXmH3hn3FOiS4gBD4bFkBGIx6GrWvj8FkIGlEIskje+B2ulE0CmePZjB/+kJOHTrD4e1Hyc0043b5zsHtFjt/rtzJsT0nqN1UemWtSFyyoGvUqOF3bc+ePTRu3JioKI+XyYSEBI4ePUrdunW9eZYvX85zzz0HwLBhw1i+fLkUdABUVeXPFTvJPpNLu+SWXs+d61O3lFrMRWG3OkiZMCDgXDi6ehSPzbyfv1bu4tieEzTv1oRHev3D734KHp9kUtAVi6AuimVlZRETE+P9HB0dTUZGho+gc3NziYiI8EkvzLXuaD83I49Hkv5B1ukcb8/5wL/v5Yaxfdm6dHuxYlY0ClqdtkjfYBf4+Ik5NGpXn8YdGniv7d6wj9fv/YCju46DAI1WwRRmwhRm8runqgqadpb22xWNYgVtNpsZMGCA3/Xx48cHjIoRExNDdna293NOTg6xsb5uXyMjIzGbzYSHhwdMB4+j/TvvvBPweDe81vhoyn85se+Uz57yh498Ro9hnanfuk7AwxcXCIsKoesNHdn8+zb0Rn2RK9y5GWaevP5FZu95l8jYCLLO5PDUDS9jzroYmsjtEuTnWFDdKmHRobgcLhw2J3qjnn6jexERG17is2SeymLxF8vJz7HQ57YeNGxbOnfCkkujWEGX5FC/ME2aNGHfvn3k5eXhdrs5efKkT+8M0Lt3b1JTU7n99ttJTU3lnnvkofjCrP91i5+BiBCwddkOajW5zjPeLWIxLDQilKmfT/YGORgRP46cs3kB89otdpZ/u5ahk65nyVcrAx7OAI+D/VsfHcKJ/afZsDAd1a3yx5cr2bZiJ++teZXQiJCA5XZv3M9Tg17Cnm/H5XTx0/u/cvfzt3PrI0NL9yIkZeaSV7m///57BgwYwNGjRxkwYAAbN25Ep9Px0ksvMXDgQAYPHsy0adNQFIX09HTefvttAJ588klmz55NUlISERER9OlTvEuda5GoahF+17Q6DTHxUbgcbkIjAwhIgVpNEpi28B8+EUsefPe+Ik0/XU43ljzPUDr7bF6RW1HGUAOhkaGk//EXLrvLs4KeZ+XIjmM82O0pnI7Azg3envAh5qx8nA4XQngOecx54Rvyc2SAwvJCOtqvgCz73xreHv+hd96q1Wmp1TSB26YMY33qFtanbsZuvWizrdNrSRzWmee+nRLQIf83b/7E7Gfn4SzkVSQ0MoT310/jh/8s4LfPl2Mz2/zKokBkbAQOhxNbXuD0O54Zzr0vjfZLujHybqyF6oyIDefFn6b6eUKRlI2idCENSyogDVrXJS4hBkWjoNFqaNOnBUaTng8e+pQV363F5XSjKArh0WGER4fRuGNDHv/kgYBiFkLQulcLRj91C826NiYkwkREbDhhUaFMemsMm3/bxm9zlvmJWaPVEBJuoseNXXC7XIHFDCA8XlICERlgpKG6VBIaxpf5nUhKhzT9rGDk51p4tPez5J7zzHsFgp1r9gAKdotnjut2eVa+Owxow7iXRxe7dfTmfdNZ9cN68nMshESYCI8O47GZ99OqRzNCwkOY2G6K39xZb9Rx17O3sf7XzWxevK3IufUFdPrAX6P73x7DG/dO9zoVDIkw0fv27sQlxATML7l8pKArGCv+txZ7IQEFOqssVMGZw+eKFfPuDfu8Ygaw5tlwWJ1sSEun88D2gGc4XxiNVsvSb1ZzZMfRgKe3CmIKN3LL5MEB03rd3I24hFi+fXM+5ux8bri3L31H9yq2PsnlIQVdwcjLMvvNdcGzv1zwGKRGq6FFYvGheLev3u1d9LqA2+Vm028Xo3IMf2QI7z04y+vNBEBv0HJy/6kixawoClq9FmOIgRv/NohbHh5SZBtadGvCc99OKbadkuAh59AVjO7DOmMqEMoGPGFcq9ep5r2uN+qIrhHJ6KdvKbauhIbxAbeU6hTo1Qfc1ZvbH7+R8OgwwiJDqdkonlcWPFNktMuQCBMjHhvK9xmf8t25Txn3yh2liowpuTLIHrqCUbtpTe59eTSf/eMrNFoNQhW079uap76YzLJv17AxbSsN2tZl6KTriYz1X3QqSNfBHYirGYPD5vAGbw+PDuOef4705lEUhbuevY3RzwzHbnF4fwASh3Vi5ffrvaMFjVZDo/b1+WD9NCngCozctqqg5GWZ2bflINfVr3FZq8L5uRa+fXM+61I3U7tJAnc9O4J6LesUW2bHmt38/tVK/ly2g5MHTqMoCs26NuaZLx8hpkbUJbdFEjxkfOhKRkRMuI+r3ZI4eyyDea//yIFth+l0fTtueSiF0IgQwiJDGfviKMa+OKrkSoBP//4lP32QhiXXis6gwxRq5LW0v9O8a/HzdUnFQAq6CnDmyFke6DwVc1Y+qltl97p9LP5iOTPS38RgLH2A9oyTWV4xg+dMtdnh4sNHZ/OfVa+UV/MlQUQuilUBvpr2I+ZMszfqhcPuJONEJqt+WF+meg5sPRTQTPTQ9qNBaaek/JGCrgLsTz+EWsizpzXPxsE/D5epntrNagY89BFfTzoDrCxIQVcBOvRvjc7gO3sKjQyhTVKLMtWT0CCe7sM6ERLh2R5TFAiLCuVv/743aG2VlC9yDl0FuG3KjSz5ahVZp7Ox5dsJjQyhedcmdDofJrYsPDH7Qbp8vYrFc5cTUyOaEY8NpUEbeYa5siAFXQUIjw5j5p9vsfSb1Rz66yjtk1vRZXAHn2OUpUWj0dDvjiT63ZFUDi2VlDdS0FUEY4iRQWOkv+xrHTmHlkiqEFLQEkkVQgpaIqlCSEFLJFWICr8otn///oCufE+cOEHNmlfPyfvVvr9sw7Xdhv379wdOEJWUwYMHX9P3l22QbQiEHHJLJFWISivoC5E1rtX7yzbINgSiwjs4kEgkpafS9tASicQfKWiJpApR4QU9Y8YMmjRpQvPmF0OnnD59mr59+5KUlESvXr3YuHGjX7kXXniBli1bkpyczE033RT0NgAsWLCAxMREunfvzu+//+5XLiMjg5SUFJKSknjssccuqw0XmDRpEsnJySQnJxMXF8f8+fN90g8dOkRsbKw3z5o1a4Jy34KU5t2++OKL9OzZk/79+3Ps2LGgt+HJJ5+ke/fuJCYmMm3aNL/08noPs2bNonv37vTq1Ytt27b5pB04cIDk5GR69uzJG2+8EZT7lZmrvcxeEqdPnxYOh0M0a9bMey03N1ecOnVKCCHEzp07RXJysl+5559/Xnz11Vfl1gaXyyXatm0rsrOzRUZGhujQoYNQVdWn3OOPPy7mzp0rhBDi7rvvFkuWLAlKe4QQwul0ikaNGgmr1epz/eDBg2LQoEFBu08gSnq327dvFwMHDhRCCPH777+LMWPGBL0Ne/bsEUII4Xa7Rffu3cXBgwd90svjPWRkZIiOHTsKh8Mh9u7dK/r16+eTPmLECLFq1SqhqqpITk4WBw4cCOr9S0OF76Fr1KiBXu/rFysiIoL4eI8nTIPBgE4X2D5m2rRp9OrVizlz5gS9DXv27KFx48ZERUURGxtLQkICR4/6uupZvnw5w4YNA2DYsGEsX778stpRkIULF9KnTx9MJpNf2pYtW0hKSmLixInk55dPpMfi3u2yZcsYOtQTMrZv375s3rw56Pdv0sTjtFCj0aDT6QJ+B4L9HtatW0dycjJ6vZ7GjRtz7tw5VPViMIIdO3bQo0cPFEUhJSWFFStWXPY9y0qFF3RxqKrKI488wtNPP+2XNnnyZNLT00lNTeWDDz5gz549Qb13VlYWMTEXYzRFR0eTkeEbXD03N5eIiIgi0y+HuXPnBtwqSUhIYP/+/axYsYL69esHHI5eLiW924LvRlEUXK7AYWqDwbx582jYsCG1a9f2uV4e76Hw3zw8PJycnBzv54LiDvbfu7RUCNNPs9nMgAED/K6PHz+e8ePHF1nub3/7G9dffz39+vXzS4uLiwMgMjKSQYMGsXXrVpo2bRq0NsTExJCdne39nJOTQ2xsrE+eyMhIzGaz9w9fOP1S25Kfn8/GjRv54osv/PIYjUaMRiMAo0aNYvLkyaW6Z1nbAEW/28LvpqgR1OW2YenSpcycOZOff/7ZL0+w3kNBCj+X2WwmKuqin/KCDiVycnKoXv0q+GK74oP8S6Tg/FUIIZ555hkxderUIvNnZ2cLITxz3X79+oktW7YEtQ1Op1O0a9dO5ObmiqysLNGxY8eAc+h58+YJIYS49957gzaH/vzzz8WUKVMCpuXk5Hj//8knn4iHH344KPcsSEnv9q+//vKaQi5btqxc5tAbN24U3bp1ExkZGQHTy+M9ZGRkiM6dOwun0ykOHDgg+vbt65M+YsQIsW7dOiGEEP379xf79++/7HuWlQov6O+++070799fhIaGiv79+4sNGzaIP//8U2g0GtG7d2/Rp08fMXLkSCGEEFu2bBFvvfWWEEKI++67T3Tv3l106dJFvPbaa0FvgxBCzJ8/XyQmJorExESxaNEivzacOXNGDB48WPTq1Us89NBDfoK/VG644QaxefNmn2t33323EEKIn3/+WXTs2FEkJSWJIUOGiDNnzgTlngUp6t1eaIMQnoWzHj16iH79+onDhw8HvQ2dOnUSLVq0EH369BF9+vTx/qiU93uYMWOGSExMFD179hTp6eni119/9S587t27V/Tp00f06NFDTJs2LSj3KyvSUkwiqUJU6kUxiUTiixS0RFKFkIKWSKoQUtASSRVCCloiqUJIQUskVQgpaImkCvH/0EQQLiKmN8oAAAAASUVORK5CYII=\n"
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "<Figure size 256x256 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "draw_figure(x_train,y_train,'original data')\n",
    "draw_figure(x_train,labels,'after k-means')"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "##### PyTorchs实现K-means"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "outputs": [],
   "source": [
    "pass"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
